//
//  MM_Http.h
//  MallManage_IOS
//
//  Created by 张浩 on 2023/9/19.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

//请求相关
typedef void(^SuccessBlock)(NSDictionary * requestDic,NSString * msg);
typedef void(^ErrorBlock)(NSString *errorInfo,NSString *status);
typedef void(^LoadProgressBlock)(float progress);

//断点下载相关
typedef void(^DownloadProgressBlock)(CGFloat progress, CGFloat totalMBRead, CGFloat totalMBExpectedToRead);
typedef void(^DownloadSuccessBlock)(NSURLSessionDataTask *operation, id responseObject);
typedef void(^DownloadFailureBlock)(NSURLSessionDataTask *operation, NSError *error);

@interface MM_Http : NSObject

+ (void)cancelAllRequest;
#pragma mark -- 取消某一个请求
+ (void)cancelRequestWithUrl:(NSString *)url;

#pragma mark -- Put  不加缓存
/*!
 *  Put请求 不缓存数据
 *
 *  @param urlStr     url
 *  @param parameters post参数
 *  @param success    成功的回调
 *  @param failure    失败的回调
 */
+ (void)putRequestURLStr:(NSString *)urlStr
                  withDic:(NSDictionary *)parameters
                  success:(SuccessBlock)success
                  failure:(ErrorBlock)failure;
/*!
 *  DELETE请求 不缓存数据
 *
 *  @param urlStr     url
 *  @param parameters post参数
 *  @param success    成功的回调
 *  @param failure    失败的回调
 */
+ (void)deleteRequestURLStr:(NSString *)urlStr
                  withDic:(NSDictionary *)parameters
                  success:(SuccessBlock)success
                  failure:(ErrorBlock)failure;


#pragma mark -- POST  不加缓存
/*!
 *  POST请求 不缓存数据
 *
 *  @param urlStr     url
 *  @param parameters post参数
 *  @param success    成功的回调
 *  @param failure    失败的回调
 */
+ (void)postRequestURLStr:(NSString *)urlStr
                  withDic:(NSDictionary *)parameters
                  success:(SuccessBlock)success
                  failure:(ErrorBlock)failure;

#pragma mark -- POST 加缓存
/*!
 *  POST请求 缓存数据
 *
 *  @param urlStr     url
 *  @param parameters post参数
 *  @param success    成功的回调
 *  @param failure    失败的回调
 */
+ (void)postRequestCacheURLStr:(NSString *)urlStr
                       withDic:(NSDictionary *)parameters
                       success:(SuccessBlock)success
                       failure:(ErrorBlock)failure;

#pragma mark -- GET 不加缓存
/*!
 *  GET请求 不缓存数据
 *
 *  @param urlStr     url
 *  @param success    成功的回调
 *  @param failure    失败的回调
 */
+ (void)getRequestURLStr:(NSString *)urlStr
                 withDic:(NSDictionary *)parameters
                 success:(SuccessBlock)success
                 failure:(ErrorBlock)failure;

#pragma mark -- GET 加缓存
/*!
 *  GET请求 缓存数据
 *
 *  @param urlStr     url
 *  @param success    成功的回调
 *  @param failure    失败的回调
 */
+ (void)getRequestCacheURLStr:(NSString *)urlStr
                      withDic:(NSDictionary *)parameters
                      success:(SuccessBlock)success
                      failure:(ErrorBlock)failure;

#pragma mark --  上传单个文件
/*!
 *  上传单个文件
 *
 *  @param urlStr     服务器地址
 *  @param pasameters 参数
 *  @param attach     上传文件的 key
 *  @param data       上传的文件
 *  @param loadProgress 上传进度
 *  @param success    成功的回调
 *  @param failure    失败的回调
 */
+ (void)uploadDataWithURLStr:(NSString *)urlStr
                     withDic:(NSDictionary *)pasameters
                    imageKey:(NSString *)attach
                    withData:(NSData *)data
              uploadProgress:(LoadProgressBlock)loadProgress
                     success:(SuccessBlock)success
                     failure:(ErrorBlock)failure;

#pragma mark -- 上传多个文件
/*!
 *  上传多个文件
 *
 *  @param urlStr     服务器地址
 *  @param pasameters 参数
 *  @param attach     上传文件的 key
 *  @param data       上传的文件
 *  @param loadProgress 上传进度
 *  @param success    成功的回调
 *  @param failure    失败的回调
 */
+ (void)uploadDataWithURLStr:(NSString *)urlStr
                     withDic:(NSDictionary *)pasameters
                    imageKey:(NSString *)attach
                   withArray:(NSArray *)dataArr
              uploadProgress:(LoadProgressBlock)loadProgress
                     success:(SuccessBlock)success
                     failure:(ErrorBlock)failure;

#pragma mark --  计算一共缓存的数据的大小
//+ (NSString *)cacheSize;

#pragma mark --  清空缓存的数据
+ (void)deleateCache;

/**
 *  获取文件大小
 *
 *  @param path 本地路径
 *
 *  @return 文件大小
 */
+ (unsigned long long)fileSizeForPath:(NSString *)path;

/**
 *  上传视频 音频 图片
 *
 *  @param URLString   请求的链接
 *  @param parameters  请求的参数
 *  @param block       二进制文件的参数
 
 二进制 文件 的请求 要用到下面的方法
 （1）： 传入文件的路径
 [formData appendPartWithFileURL:[NSURL fileURLWithPath:mp4Path] name:@"Filedata" fileName:@"mp4Path.mp4" mimeType:@"application/octet-stream" error:nil];
 或者
 （2）：传入文件的data
 [formData appendPartWithFileData:data name:@"服务器接收的名字" fileName:@"自己给当前的文件取的名字" mimeType:@"application/octet-stream"];
 
 *  @param success     请求成功
 *  @param failure     请求失败
 *  @param uploadProgress 请求的进度
 *
 *  @return AFHTTPRequestOperation的请求
 */
+ (NSURLSessionDataTask*)MMPost:(NSString *)URLString
                     parameters:(id)parameters
      constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
                       progress:( void (^)(NSProgress *  progress))uploadProgress
                        success:(void (^)(NSURLSessionDataTask *operation, id responseObject))success
                        failure:(void (^)(NSURLSessionDataTask *operation, NSError *error))failure;

/*缓存数据的url的链接 **/
+ (NSString *)urlDictToStringWithUrlStr:(NSString *)urlStr WithDict:(NSDictionary *)parameters;


/**
 *  获得图片全路径
 *
 *  @param path 路径
 *
 *  @return 返回全路径
 */
+ (NSString *)getImageFullPathWithPath:(NSString *)path;

+ (NSURL *)getImgUrlFullPathWithStr:(NSString *)urlStr;

@end

NS_ASSUME_NONNULL_END
